package work;

import java.util.Arrays;
import java.util.List;

/**
 * 工作测试
 */
public class Test {
    public static void main(String[] args) {
        System.out.println("hello world");
        //1.初始化数组5,12,13,14
        int[] num1 = {1,2,3,4,5};
        int[] num2 = {1,2,3,4,5,6,7,8,9,10,11,12};
        int[] num3 = {1,2,3,4,5,6,7,8,9,10,11,12,13};
        int[] num4 = {1,2,3,4,5,6,7,8,9,10,11,12,13,14};
        int[][] totalNums = new int [4][];
        totalNums[0] = num1;
        totalNums[1] = num2;
        totalNums[2] = num3;
        totalNums[3] = num4;
        //第一页，跳过0个数【不需要调用】
        //第二页，跳过10个数
        //第三页，跳过20个数
        //第四页，跳过30个数
        int pageNum = 3;
        int pageSize = 10;
        //计算跳过几个数
        int jumpNum = (pageNum-1) * pageSize;
        int[] pageNums = getPageJumpNums(totalNums, jumpNum);
        System.out.println("第"+pageNum+"页，跳过"+jumpNum+"个数");
        System.out.println(Arrays.toString(pageNums));
        System.out.println(Arrays.toString(getPageShowNums(totalNums, pageNums, pageSize)));

    }

    /**
     * 参数：total数组，要跳过几个数
     * 返回新数组：每组total：跳过的数
     */
    public static int[] getPageJumpNums(int[][] totalNums,int jumpNum){
        int[] newNums = new int[totalNums.length];
        for (int i = 0; i < totalNums.length; i++) {
            if(jumpNum - totalNums[i].length > 0){
                jumpNum = jumpNum - totalNums[i].length;
            }else {
                //说明找到了要跳过多少
                newNums[i] = jumpNum;
                break;
            }
        }
        return newNums;

    }
    /**
     * 参数：total数组，跳过的数组,要展示几个数（pageSize）
     * 返回新数组：每组total展示几个数
     */
    public static int[] getPageShowNums(int[][] totalNums,int[] jumNums,int pageSize){
        //遍历索引：
        int index = 0;
        //1.确定从哪个数组开始遍历
        if(jumNums!=null ||jumNums.length > 0){
            for (int i = 0; i < jumNums.length; i++) {
                if(jumNums[i]>0){
                    index = i;
                }
            }
        }
        //2.根据pageSize展示数据
        int[] newNums = new int[totalNums.length];
        if(index!=0){
            int temp = totalNums[index].length - jumNums[index];
            //确实跳过了值，index就是数组索引，jumNums[index]为跳过了多少
            for (int i = index; i < totalNums.length; i++) {
                //初始值为总数-跳过的值 = 差值 : 12 - 5 = 7
                if(pageSize - temp >= 0){
                    //说明这些全都要展示
                    newNums[i] = temp;
                    pageSize = pageSize - temp;//更新pageSize ,10 - 7 = 3
                    if(i+1 < totalNums.length){
                        temp = totalNums[i+1].length;//防止数组越界
                    }else {
                        //已经到最后一个了
                        break;
                    }
                }else {
                    //当pageSize < temp，说明只有部分要展示，直接展示pageSize的大小
                    newNums[i] = pageSize;
                    break;
                }

            }
        }else{
            //直接开始
            for (int i = 0; i < totalNums.length; i++) {
                if(pageSize - totalNums[i].length >= 0){
                    //说明这些全都要展示
                    newNums[i] = totalNums[i].length;
                    pageSize = pageSize - totalNums[i].length;//更新pageSize
                }else{
                    newNums[i] = pageSize;
                    break;
                }

            }

        }

        return newNums;
    }

    /**
     * 参数：total数组，跳过的数组,要展示几个数（pageSize）
     * 返回新数组：每组total展示几个数
     * 在过程中处理了要展示的数据，并进行展示
     */
    public static int[] getPageShowNums(int[][] totalNums, int[] jumNums, int pageSize, List<Integer> result){
        //遍历索引：
        int index = 0;
        //1.确定从哪个数组开始遍历
        if(jumNums!=null ||jumNums.length > 0){
            for (int i = 0; i < jumNums.length; i++) {
                if(jumNums[i]>0){
                    index = i;
                }
            }
        }
        //2.根据pageSize展示数据
        int[] newNums = new int[totalNums.length];
        if(index!=0){
            //索引不为0说明确实跳过了值，index就是数组索引，jumNums[index]为跳过了多少
            int temp = totalNums[index].length - jumNums[index];
            if(pageSize - temp >= 0){
                newNums[index] = temp;
                //要从跳过的值下一个数据开始展示[初始化，存储第一组跳过的数]
                for (int j = jumNums[index]; j < jumNums[index]+newNums[index]; j++) {
                    result.add(totalNums[index][j]);
                }
                pageSize = pageSize - temp;
                if(index + 1 < totalNums.length){
                    temp = totalNums[index+1].length;//防止数组越界
                }else {
                    //已经到最后一个了
                }
            }else{
                //当pageSize < temp，说明只有部分要展示，直接展示pageSize的大小
                newNums[index] = pageSize;
                //把要展示的数存储到集合列表里【存储第一组的数字】
                for (int j = jumNums[index]; j < jumNums[index]+newNums[index]; j++) {
                    result.add(totalNums[index][j]);
                }

            }

            for (int i = index+1; i < totalNums.length; i++) {
                //初始值为总数-跳过的值 = 差值 : 12 - 5 = 7
                if(pageSize - temp >= 0){
                    //说明这些全都要展示
                    newNums[i] = temp;
                    pageSize = pageSize - temp;//更新pageSize ,10 - 7 = 3
                    if(i+1 < totalNums.length){
                        temp = totalNums[i+1].length;//防止数组越界
                    }else {
                        //已经到最后一个了
                        break;
                    }
                }else {
                    //当pageSize < temp，说明只有部分要展示，直接展示pageSize的大小
                    newNums[i] = pageSize;
                    //把要展示的数存储到集合列表里
                    for (int j = 0; j < newNums[i]; j++) {
                        result.add(totalNums[i][j]);
                    }
                    break;
                }

            }
        }else{
            //直接开始
            for (int i = 0; i < totalNums.length; i++) {
                if(pageSize - totalNums[i].length >= 0){
                    //说明这些全都要展示
                    newNums[i] = totalNums[i].length;
                    //把要展示的数存储到集合列表里
                    for (int j = 0; j < newNums[i]; j++) {
                        result.add(totalNums[i][j]);
                    }
                    pageSize = pageSize - totalNums[i].length;//更新pageSize
                }else{
                    newNums[i] = pageSize;
                    //把要展示的数存储到集合列表里
                    for (int j = 0; j < newNums[i]; j++) {
                        result.add(totalNums[i][j]);
                    }
                    break;
                }

            }

        }

        return newNums;
    }




}



